import { computed } from 'vue'
import { useUserStore } from '@/stores/user'

/**
 * 权限检查的组合式函数
 */
export function usePermission() {
    const userStore = useUserStore()

    /**
     * 检查是否有指定权限
     * @param permission 权限代码或权限代码数组
     * @param requireAll 当传入数组时，是否需要拥有所有权限（默认false，即拥有任意一个即可）
     */
    const hasPermission = (permission: string | string[], requireAll = false): boolean => {
        // 如果没有用户信息，返回false
        if (!userStore.userInfo) {
            return false
        }

        // 超级管理员拥有所有权限
        if (userStore.isSuperAdmin) {
            return true
        }

        if (Array.isArray(permission)) {
            if (requireAll) {
                // 需要拥有所有权限
                return permission.every(p => userStore.hasPermission(p))
            } else {
                // 拥有任意一个权限即可
                return permission.some(p => userStore.hasPermission(p))
            }
        } else {
            // 单个权限检查
            return userStore.hasPermission(permission)
        }
    }

    /**
     * 检查是否有指定角色
     * @param role 角色代码或角色代码数组
     */
    const hasRole = (role: string | string[]): boolean => {
        if (!userStore.userInfo) {
            return false
        }

        if (Array.isArray(role)) {
            return role.some(r => userStore.hasRole(r))
        } else {
            return userStore.hasRole(role)
        }
    }

    /**
     * 检查是否有指定模块权限
     * @param module 模块名称
     */
    const hasModulePermission = (module: string): boolean => {
        if (!userStore.userInfo) {
            return false
        }

        // 超级管理员拥有所有权限
        if (userStore.isSuperAdmin) {
            return true
        }

        return userStore.hasModulePermission(module)
    }

    // 响应式的权限状态
    const isLoggedIn = computed(() => !!userStore.userInfo)
    const isSuperAdmin = computed(() => userStore.isSuperAdmin)
    const userRoles = computed(() => userStore.userInfo?.roles || [])
    const userPermissions = computed(() => userStore.userInfo?.permissions || [])

    return {
        hasPermission,
        hasRole,
        hasModulePermission,
        isLoggedIn,
        isSuperAdmin,
        userRoles,
        userPermissions
    }
}

export default usePermission